#include "mylabel.h"
#include <QDebug>
#include <QMouseEvent>

mylabel::mylabel(QWidget *parent) : QLabel(parent)
{
    //设置鼠标追踪状态，不点击就检测到移动
    setMouseTracking(true);

}

//鼠标进入事件
void mylabel::enterEvent(QEvent * event)
{
    qDebug()<<"enter";
}

//鼠标离开事件
void mylabel::leaveEvent(QEvent * )
{
    qDebug()<<"leave";
}

//鼠标移动事件
void mylabel::mouseMoveEvent(QMouseEvent *ev)
{
    //移动是状态，用 & 与 操作符判断，调用buttons
    if(ev->buttons() & Qt::LeftButton)
    {
        QString str = QString("鼠标移动 x= %1  y= %2  globalx = %3   globaly= %4  ").arg(ev->x())
                .arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
        qDebug()<<str;
    }

}
//鼠标按下事件
void mylabel::mousePressEvent(QMouseEvent *ev)
{
    //鼠标左键 按下打印信息
    //输出按下位置
    if(ev->button() == Qt::LeftButton)
    {
        QString str = QString("鼠标按下 x= %1  y= %2  globalx = %3   globaly= %4  ").arg(ev->x())
                .arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
        qDebug()<<str;
    }
}
//鼠标释放事件
void mylabel::mouseReleaseEvent(QMouseEvent *ev)
{
    if(ev->button() == Qt::LeftButton)
    {
        QString str = QString("鼠标释放 x= %1  y= %2  globalx = %3   globaly= %4  ").arg(ev->x())
                .arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
        qDebug()<<str;
    }

}

//通过event事件分发器  拦截 鼠标按下操作
bool mylabel::event(QEvent *e)
{
    if(e->type() == QEvent::MouseButtonPress)
    {
        //进行类型转换
        QMouseEvent * ev = static_cast<QMouseEvent * >(e) ;
        QString str = QString("event鼠标按下 x= %1  y= %2  globalx = %3   globaly= %4  ").arg(ev->x())
                .arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
        qDebug()<<str;
        return true; //true代表用户自己处理这个事件
    }
    //其他事件交给给父类QLabel中的event处理
    return QLabel::event(e);
}


